<?php

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of UsersController
 *
 * @author Gloire
 */
class UsersController extends AppController {

    //Inscription
    function signup() {
        if ($this->request->is('post')) {
            $d = $this->request->data;
            $d['User']['id'] = null; //S'assurer d'avoir une insertion et non une modification
            if (!empty($d['User']['password'])) {
                $d['User']['password'] = Security::hash($d['User']['password'], null, true);
            }
            if ($this->User->save($d, true, array('username', 'password', 'mail'))) { // true permet de confirmer que l'on veut faire une validation
                $link = array('controller' => 'users', 'action' => 'activate', $this->User->id . '-' . md5($d['User']['password'])); //Dernier parametre le token, une composition de l'id de l'utilisateur et de son mdp
                App::uses('CakeEmail', 'Network/Email');
                $mail = new CakeEmail('default');
                $mail->From('mapsc@contact.fr')
                        ->to($d['User']['mail'])
                        ->subject("Inscription Map Sporting Club")
                        ->emailFormat('html')
                        ->template('signup') //Template dans Email/html/signup.ctp
                        ->viewVars(array('username' => $d['User']['username'], 'link' => $link)) // On envoi les informations à la vue
                        ->send();
                $this->Session->setFlash(__("Votre compte est en attente de validation, un mail de confirmation vient de vous être envoyé"), 'notif');
            } else {
                $this->Session->setFlash(__("Merci de corriger vos erreurs"), 'notif', array('type' => 'error')); //Dernier parametre = envoi une notification de type error à la vue
            }
        }
    }

    //Déconnexion
    function logout() {
        $this->Auth->logout();
        $this->redirect('/');
    }

    //Connexion
    function login() {
        if ($this->request->is('post')) {
            if ($this->Auth->login()) {
                $this->Session->setFlash(__("Bienvenu(e) ".AuthComponent::user('username')." !"), 'notif');

            } else {
                $this->Session->setFlash(__("Identifiant incorrect"), 'notif', array('type' => 'error'));
            }
            
                $this->redirect('/');
        }
    }

    //Récuperer le mot de passe
    function password() {
        if (!empty($this->request->params['named']['token'])) {
            $token = $this->request->params['named']['token']; //jeton
            $token1 = explode('-', $token);
            $user = $this->User->find('first', array('conditions' => array('id' => $token1[0], 'User.password' => $token1[1], 'active' => 1)));
            if ($user) {
                $this->Auth->login($user['User']);
                return $this->redirect('./edit');
            } else {
                $this->Session->setFlash(__("Le lien n'est pas valide"), "notif", array('type' => 'error'));
            }
        }
        if ($this->request->is('post')) {
            $d = $this->request->data;
            $user = $this->User->find('first', array('conditions' => array('mail' => $d['User']['mail'], 'active' => 1)));
            if (!empty($user)) {
                App::uses('CakeEmail', 'Network/Email'); //appel du composant email
                $link = array('controller' => 'users', 'action' => 'password', 'token' => $user['User']['id'] . '-' . $user['User']['password']); //lien sur lequel il faut cliquer pour pouvoir être redirigé
                $mail = new CakeEmail('default'); //instanciation du mail
                $mail->From('mapsc@contact.fr') //paramètrage
                        ->to($user['User']['mail'])
                        ->subject("Mot de passe oublié")
                        ->emailFormat('html')
                        ->template('password') //Template dans Email/html/password.ctp
                        ->viewVars(array('username' => $user['User']['username'], 'link' => $link)) // On envoi les informations à la vue
                        ->send();
            } else {
                $this->Session->setFlash(__("Aucun utilisateur trouvé pour ce mail "), "notif", array('type' => 'error'));
            }
        }
    }

    //Activer le compte
    function activate($token) { 
        $token1 = explode('-', $token);
        //Prend le premier utilisateur qui correspond à la condition
        $user = $this->User->find('first', array('conditions' => array('id' => $token1[0], 'MD5(User.password)' => $token1[1], 'active' => 0))); //Conditions id correspondant au token, password identique et compte non activé
        if (!empty($user)) {
            $this->User->id = $user['User']['id'];
            $this->User->saveField('active', 1);
            $this->Session->setFlash(__("Votre compte a bien été activé " ). $user['User']['username'], "notif");
            $this->Auth->login($user['User']); //Connexion automatique apres activation
        } else {
            $this->Session->setFlash(__("Ce lien d'activation n'est pas valide"), "notif", array('type' => 'error')); //il n'y a pas d'utilisateur associé au token
        }
        $this->redirect('/');
    }

    //Changer de mot de passe
    function edit() {
        $user_id = $this->Auth->user('id');
        if (!$user_id) {
            $this->redirect('/');
            die(); // S'assurer qu'aucun script ne s'éxécute
        } else {
            $this->User->id = $user_id;
            $passError = false;
            if ($this->request->is('post')) {
                $d = $this->request->data;
                $d['User']['id'] = $user_id; // Empecher à l'utilisateur de rentrer un id
                if (!empty($d['User']['password1'])) {
                    if ($d['User']['password1'] == $d['User']['password2']) {
                        $d['User']['password'] = Security::hash($d['User']['password1'], null, true);
                    } else {
                        $passError = true;
                    }
                }
                if ($this->User->saveField('password', $d['User']['password'])) {
                    $this->Session->setFlash("Votre mot de passe a bien été modifié", "notif");
                } else {
                    $this->Session->setFlash(__("Les champs ne sont pas identiques"), "notif", array('type' => 'error'));
                }if ($passError) {
                    $this->User->validationErrors['password1'] = array('Les champs ne sont pas identiques');
                }
            }
        }
    }

}
